﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Data;
using Telerik.Web.UI;
using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.Style;
using System.Drawing;
using System.Security.AccessControl;
//using Microsoft.Office.Interop.Word;

namespace KPIS.GERP.GAMS.APP.App_UI.Commons
{
    public class Main : System.Web.UI.Page
    {
        HttpContext context = HttpContext.Current;
        public string strUserID {
            get 
            {
                return Session["UserSeq"].ToString();
            } 
        }
        public string strEmpID
        {
            get
            {
                return Session["EmpSeq"].ToString();
            }
        }
        public string strServerName = "kpis-server";
        public string strDatabaseName = "gerp";
        public string strUserName = "root";
        public string strPassword = "kpis";
        

        private string strSelectWord;//= "< เลือกรายการรหัสบัญชี >";

        public string StrSelectWord
        {
            get { return strSelectWord; }
            set { strSelectWord = value; }
        }
        public string strAllWord = "< ทั้งหมด >";

        public string WebString(string String)
        {
            string strResult = "";

            strResult = String.Replace("&nbsp;", "");

            return strResult;
        }

        public void FolderACL(String accountName, String folderPath)
        {
            FileSystemRights Rights;

            //What rights are we setting?
            Rights = FileSystemRights.FullControl;
            bool modified;
            InheritanceFlags none = new InheritanceFlags();
            none = InheritanceFlags.None;

            //set on dir itself
            FileSystemAccessRule accessRule = new FileSystemAccessRule(accountName, Rights, none, PropagationFlags.NoPropagateInherit, AccessControlType.Allow);
            DirectoryInfo dInfo = new DirectoryInfo(folderPath);
            DirectorySecurity dSecurity = dInfo.GetAccessControl();
            dSecurity.ModifyAccessRule(AccessControlModification.Set, accessRule, out modified);

            //Always allow objects to inherit on a directory 
            InheritanceFlags iFlags = new InheritanceFlags();
            iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;

            //Add Access rule for the inheritance
            FileSystemAccessRule accessRule2 = new FileSystemAccessRule(accountName, Rights, iFlags, PropagationFlags.InheritOnly, AccessControlType.Allow);
            dSecurity.ModifyAccessRule(AccessControlModification.Add, accessRule2, out modified);

            dInfo.SetAccessControl(dSecurity);
        }

        public string GetStatusMessage(int offset, int total)
        {
            if (total <= 0)
                return "ไม่พบข้อมูล";

            return String.Format("ลำดับที่ <b>1</b>-<b>{0}</b> จากทั้งหมด <b>{1}</b>", offset, total);
        }

        public void SetupReport(string strReportName, string strSeq)
        {
            Session["ReportName"] = strReportName;
            Session["ReportSeq"] = strSeq;
        }

        public void InsertEmptyDDLSelect(RadComboBox ddl)
        {
            RadComboBoxItem empty = new RadComboBoxItem("< เลือกรายการ >", "");
            ddl.Items.Insert(0, empty);
        }

        public void InsertEmptyDDLAll(RadComboBox ddl)
        {
            RadComboBoxItem empty = new RadComboBoxItem("< เลือกทั้งหมด >", "");
            ddl.Items.Insert(0, empty);
        }

        public string GetFiscalPeriod(DateTime dt)
        {
            string strFiscalPeriod = dt.Year.ToString() + "/" + dt.Month.ToString();

            return strFiscalPeriod;
        }

        public Nullable<int> ConvertNullInt(Object o)
        {
            Nullable<int> result = (o == null ? null : (o.ToString().Length == 0 ? null : (Nullable<int>)Convert.ToInt32(o)));
            return result;
        }

        public Nullable<double> ConvertNullDouble(Object o)
        {
            Nullable<double> result = (o == null ? null : (o.ToString().Length == 0 ? null : (Nullable<double>)Convert.ToDouble(o)));
            return result;
        }

        public Nullable<DateTime> ConvertNullDateTime(Object o)
        {
            Nullable<DateTime> result = (o == null ? null : (o.ToString().Length == 0 ? null : (Nullable<DateTime>)Convert.ToDateTime(o)));
            return result;
        }

        public void MessageAlert(System.Web.UI.Page p, string strMessage)
        {
            ScriptManager.RegisterClientScriptBlock(p, p.GetType(), "onclick"
                , "window.alert('" + strMessage + "');", true);
        }

        //public UserInfo GetUserInfo(string strUserID)
        //{
        //    UserInfo userinfo = new UserInfo();
        //    //DataTable dtb = user.GetUserInfo(strUserID);

        //    //if (dtb.Rows.Count > 0)
        //    //{
        //    //    userinfo.UserName = dtb.Rows[0]["user_name"].ToString();
        //    //    userinfo.EmpSeq = dtb.Rows[0]["emp_seq"].ToString();
        //    //}

        //    return userinfo;
        //}

        //public int GetBgmMonth(string strBgmSourceSeq, Nullable<DateTime> dt)
        //{
        //    int nBgmMonth;
        //    int nMonthStart;
        //    int nCurrentMonth;

        //    IBLL_BGM_MAS_Source source = new B_BGM_MAS_Source();
        //    M_BGM_MAS_Source info = source.GetInfo(strBgmSourceSeq);
        //    nMonthStart = info.month_start.Value;

        //    if (dt == null)
        //    {
        //        dt = DateTime.Today;
        //    }

        //    nCurrentMonth = dt.Value.Month;
        //    nBgmMonth = (nMonthStart <= nCurrentMonth ? nCurrentMonth - nMonthStart + 1 : nCurrentMonth + 13 - nMonthStart);

        //    return nBgmMonth;
        //}

        public void UpdateTabStrip(RadTabStrip tab, int nSelectIndex, string strMode)
        {
            if (strMode == "AddNew")
            {
                for (int i = 0; i < tab.Tabs.Count; i++)
                {
                    tab.Tabs[i].Enabled = i <= nSelectIndex;
                }
            }
            else
            {
                for (int i = 0; i < tab.Tabs.Count; i++)
                {
                    tab.Tabs[i].Enabled = true;
                }
            }
        }

       //public void FindTreeValue(RadTreeView treeView, string strValue)
        //{
        //    RadTreeNodeCollection nodes = treeView.Nodes;

        //    foreach (RadTreeNode tn in nodes)
        //    {
        //        if (strValue.Length > 0)
        //        {
        //            if (tn.Value == strValue)
        //            {
        //                tn.Selected = true;

        //                if (tn.ParentNode != null)
        //                    tn.ParentNode.Expanded = true;

        //                return;
        //            }
        //            FindRecursive(tn, strValue);
        //        }
        //    }
        //}

        //public void FindTreeValueBgPlan(RadTreeView treeView, string strValue, string strCatagory
        //    , string strBgSourceSeq, string strBgYear, string strBgMonth)
        //{
        //    RadTreeNodeCollection nodes = treeView.Nodes;

        //    foreach (RadTreeNode tn in nodes)
        //    {
        //        if (strValue.Length > 0)
        //        {
        //            if (tn.Value == strValue && tn.Category == strCatagory)
        //            {
        //                tn.Selected = true;
        //                tn.ParentNode.Expanded = true;
        //                return;
        //            }

        //            if (tn.ExpandMode == TreeNodeExpandMode.ServerSideCallBack && tn.Nodes.Count == 0)
        //            {
        //                PopulatePlanNodeOnDemand(tn, TreeNodeExpandMode.ServerSideCallBack
        //                    , strBgSourceSeq, strBgYear, strBgMonth);

        //                tn.Toggle();
        //            }

        //            FindRecursiveBgPlan(tn, strValue, strCatagory
        //                , strBgSourceSeq, strBgYear, strBgMonth);
        //        }
        //    }
        //}

        //    protected void FindRecursive(RadTreeNode treeNode, string strValue)
        //    {
        //        foreach (RadTreeNode tn in treeNode.Nodes)
        //        {
        //            if (tn.Value == strValue)
        //            {
        //                tn.Selected = true;

        //                if (tn.ParentNode != null)
        //                    tn.ParentNode.Expanded = true;

        //                return;
        //            }
        //            FindRecursive(tn, strValue);
        //        }
        //    }

        //    //protected void FindRecursiveBgPlan(RadTreeNode treeNode, string strValue, string strCatagory
        //    //    , string strBgSourceSeq, string strBgYear, string strBgMonth)
        //    //{
        //    //    foreach (RadTreeNode tn in treeNode.Nodes)
        //    //    {
        //    //        if (tn.Value == strValue && tn.Category == strCatagory)
        //    //        {
        //    //            tn.Selected = true;
        //    //            tn.ParentNode.Expanded = true;
        //    //            return;
        //    //        }

        //    //        if (tn.ExpandMode == TreeNodeExpandMode.ServerSideCallBack && tn.Nodes.Count == 0)
        //    //        {
        //    //            PopulatePlanNodeOnDemand(tn, TreeNodeExpandMode.ServerSideCallBack
        //    //                , strBgSourceSeq, strBgYear, strBgMonth);

        //    //            tn.
        //    //            tn.Toggle();
        //    //        }
        //    //        FindRecursiveBgPlan(tn, strValue, strCatagory, strBgSourceSeq, strBgYear, strBgMonth);
        //    //    }
        //    //}

        //    //==========================================================================================
        //    private void PopulatePlanNodeOnDemand(RadTreeNode ParentNode, TreeNodeExpandMode expandMode
        //        , string strBgSourceSeq, string strBgYear, string strBgMonth)
        //    {
        //        //IBLL_BGM_StrategyDataMapping strmap = new B_BGM_StrategyDataMapping();
        //        //IBLL_BGM_Plan plan = new B_BGM_Plan();

        //        //switch (ParentNode.Category)
        //        //{
        //        //    case "Strat":
        //        //        IList<M_BGM_StrategyDataMapping> StrInfolist1 = strmap.GetList(ParentNode.Value);
        //        //        foreach (M_BGM_StrategyDataMapping info in StrInfolist1)
        //        //        {
        //        //            RadTreeNode node = new RadTreeNode();
        //        //            node.Text = info.m_bgm_strategydatalist.bgm_strat_list_name;

        //        //            node.ExpandMode = expandMode;
        //        //            if (info.lower_bgm_strat_data_map_seq == null)
        //        //            {
        //        //                node.Category = "LastStrat";
        //        //                node.Value = info.bgm_strat_list_seq.ToString();
        //        //            }
        //        //            else
        //        //            {
        //        //                node.Category = "Strat";
        //        //                node.Value = info.bgm_strat_data_map_seq.ToString();
        //        //            }
        //        //            ParentNode.Nodes.Add(node);
        //        //        }
        //        //        break;
        //        //    case "LastStrat":
        //        //        IList<M_BGM_Plan> planInfolist = plan.GetFull(strBgSourceSeq
        //        //            , strBgYear, strBgMonth, Session["UserInternalJobsiteSeq"].ToString()
        //        //            , ParentNode.Value, null);

        //        //        foreach (M_BGM_Plan info in planInfolist)
        //        //        {
        //        //            RadTreeNode node = new RadTreeNode();
        //        //            node.Text = info.bgm_plan_name + " " + info.amount_remain.ToString();
        //        //            //UserControl uc = (UserControl)LoadControl((Server.MapPath("../UserControls/FIM_BgmPlan.ascx")));
        //        //            ////UserControl uc = (UserControl)LoadControl(Server.MapPath("FIM_BgmPlan.ascx"));
        //        //            //uc.ID = "FIM_BgmPlan1";
        //        //            //UserControls.FIM_BgmPlan BgmPlan = (UserControls.FIM_BgmPlan)uc;
        //        //            //BgmPlan.LoadBgmPlan(info.bgm_plan_seq.ToString(), strBgMonth);
        //        //            node.Value = info.bgm_plan_seq.ToString();
        //        //            node.Category = "Plan";
        //        //            //node.Controls.Add(uc);
        //        //            ParentNode.Nodes.Add(node);
        //        //        }

        //        //        ParentNode.Expanded = true;
        //        //        break;
        //        }
        //    }
        //    //==========================================================================================

        //    private static bool IsAValidNumber(string strNumberText)
        //    {
        //        // There can be only one point and the others must be 0-9
        //        int i;
        //        int nPointCount = 0;
        //        string strChar;
        //        bool bOK = true;

        //        for (i = 0; i < strNumberText.Length; i++)
        //        {
        //            strChar = strNumberText.Substring(i, 1);

        //            if (strChar == ".")
        //                nPointCount++;

        //            if (nPointCount > 1 || strChar != "." && (int.Parse(strChar) < 0 || int.Parse(strChar) > 9))
        //            {
        //                bOK = false;
        //                break;
        //            }
        //        }

        //        return bOK;
        //    }

        //    private static string EachNumberPositionThaiText(string strReverseNumberText, int nMaxPosition
        //        , int nCurrentPosition, string[] astrPositionName, string[] astrDigitName)
        //    {
        //        int nDigit;
        //        string strDigitName;
        //        int nPosition;
        //        string strPositionName;
        //        int nPreviousDigit = 0;

        //        nDigit = int.Parse(strReverseNumberText.Substring(nCurrentPosition, 1));

        //        if (nCurrentPosition < nMaxPosition)
        //            nPreviousDigit = int.Parse(strReverseNumberText.Substring(nCurrentPosition + 1, 1));
        //        // notice: lngPosition = (lngCurrentPosition - 1) Mod 6 + 1
        //        nPosition = (nCurrentPosition - 1) % 6 + 1;

        //        if (nDigit == 0 && nMaxPosition > 0 || nDigit == 1 && nPosition == 1)
        //            strDigitName = "";
        //        else if (nDigit == 1 && (nPosition == 0 || nPosition == 6)
        //            && nMaxPosition > nCurrentPosition
        //            && nPreviousDigit > 0)
        //            strDigitName = "เอ็ด";
        //        else if (nDigit == 2 && nPosition == 1)
        //            strDigitName = "ยี่";
        //        else
        //            strDigitName = astrDigitName[nDigit];

        //        if (nDigit == 0 && nPosition != 6)
        //            strPositionName = "";
        //        else
        //            strPositionName = astrPositionName[nPosition];

        //        return strDigitName + strPositionName;
        //    }

        //    public static string MoneyTextThai(double dblNumber)
        //    {
        //        return MoneyTextThai(dblNumber.ToString(), "บาท", "สตางค์");
        //    }

        //    public static string MoneyTextThai(decimal dblNumber)
        //    {
        //        return MoneyTextThai(dblNumber.ToString(), "บาท", "สตางค์");
        //    }

        //    public static string MoneyTextThai(string strNumberText)
        //    {
        //        return MoneyTextThai(strNumberText, "บาท", "สตางค์");
        //    }

        //    public static string MoneyTextThai(string strNumberText, string strCurrencyMain, string strCurrencyPercent)
        //    {
        //        string strResult = "";
        //        string[] astrPositionName = { "", "สิบ", "ร้อย", "พัน", "หมื่น", "แสน", "ล้าน" };
        //        string[] astrDigitName = { "ศูนย์", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า" };
        //        string strReverseBaht;
        //        string strReverseSatang;
        //        int nPointPosition;
        //        int nMaxPosition;
        //        int nCurrentPosition;

        //        // simplify the number
        //        strNumberText = strNumberText.Trim().Replace(",", "");

        //        while (strNumberText.Length > 1
        //            && StringX.Left(strNumberText, 1) == "0"
        //            && StringX.Left(strNumberText, 2) != "0.")
        //            strNumberText = strNumberText.Substring(1);

        //        // check number validation
        //        if (!IsAValidNumber(strNumberText))
        //            throw new Exception(strNumberText + " ไม่ใช่จำนวนที่ถูกต้อง");

        //        // separate baht and satang
        //        nPointPosition = strNumberText.IndexOf(".");

        //        if (nPointPosition >= 0)
        //        {
        //            strReverseBaht = StringX.StrReverse(strNumberText.Substring(0, nPointPosition));
        //            strReverseSatang
        //                = StringX.StrReverse(StringX.Right(double.Parse(strNumberText.Substring(nPointPosition)).ToString(".00"), 2));
        //        }
        //        else
        //        {
        //            strReverseBaht = StringX.StrReverse(strNumberText);
        //            strReverseSatang = "00";
        //        }

        //        // begin process baht
        //        nMaxPosition = strReverseBaht.Length - 1;

        //        for (nCurrentPosition = nMaxPosition; nCurrentPosition >= 0; nCurrentPosition--)
        //        {
        //            strResult += EachNumberPositionThaiText(strReverseBaht
        //                , nMaxPosition, nCurrentPosition, astrPositionName, astrDigitName);
        //        }

        //        if (strResult.Length > 0)
        //            strResult += strCurrencyMain;
        //        // end process baht

        //        // begin process satang
        //        if (strResult.Length > 0 && strReverseSatang == "00")
        //        {
        //            strResult += "ถ้วน";
        //        }
        //        else
        //        {
        //            if (strResult == "ศูนย์ " + strCurrencyMain)
        //                strResult = "";

        //            nMaxPosition = strReverseSatang.Length - 1;

        //            for (nCurrentPosition = nMaxPosition; nCurrentPosition >= 0; nCurrentPosition--)
        //                strResult += EachNumberPositionThaiText(strReverseSatang
        //                    , nMaxPosition, nCurrentPosition, astrPositionName, astrDigitName);

        //            if (strResult.Length > 0)
        //                strResult += strCurrencyPercent;
        //        }
        //        // end process satang

        //        return strResult;
        //    }
        //}

        //public class UserInfo
        //{
        //    public string strUserID;
        //    public string strUserName;
        //    public string strEmpSeq;

        //    public UserInfo()
        //    {

        //    }

        //    public string UserID
        //    {
        //        get
        //        {
        //            return strUserID;
        //        }
        //        set
        //        {
        //            strUserID = value;
        //        }
        //    }

        //    public string UserName
        //    {
        //        get
        //        {
        //            return strUserName;
        //        }
        //        set
        //        {
        //            strUserName = value;
        //        }
        //    }

        //    public string EmpSeq
        //    {
        //        get
        //        {
        //            return strEmpSeq;
        //        }
        //        set
        //        {
        //            strEmpSeq = value;
        //        }
        //    }
        //}

        //public enum MDataType
        //{
        //    String,
        //    DateTime,
        //    Int,
        //    Double
        //}


    }
    // รอวิวมาแก้
    //public class MailMerge
    //{
    //    public bool MergeTemplate(string strTemplateFilePath, string strSaveAsFilePath
    //        , Dictionary<string, string> fields
    //        , Dictionary<string, System.Data.DataTable> dtbs
    //        , List<Dictionary<string, string>> Dics
    //        , Dictionary<string, bool> areas)
    //    {
    //        bool bOK = false;
    //        Object oMissing = System.Reflection.Missing.Value;
    //        Object oTemplatePath = strTemplateFilePath;
    //        Application application = new Application();
    //        Microsoft.Office.Interop.Word._Document wordDoc = new Document();

    //        try
    //        {
    //            wordDoc = application.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);

    //            if (fields != null)
    //            {
    //                foreach (Field myMergeField in wordDoc.Fields)
    //                {
    //                    Range rngFieldCode = myMergeField.Code;
    //                    String fieldText = rngFieldCode.Text;

    //                    if (fieldText.StartsWith(" MERGEFIELD"))
    //                    {
    //                        Int32 endMerge = fieldText.IndexOf("\\");
    //                        Int32 fieldNameLength = fieldText.Length - endMerge;
    //                        String fieldName = fieldText.Substring(11, endMerge - 11);

    //                        fieldName = fieldName.Trim();

    //                        if (fields.ContainsKey(fieldName))
    //                        {
    //                            string strValue = fields[fieldName];
    //                            myMergeField.Select();
    //                            application.Selection.TypeText(strValue);
    //                        }
    //                    }
    //                }
    //            }

    //            if (dtbs != null)
    //            {
    //                foreach (var _dtb in dtbs)
    //                {
    //                    System.Data.DataTable dtb = _dtb.Value;
    //                    for (int i = 0; i < dtb.Rows.Count; i++)
    //                    {
    //                        System.Data.DataRow dr = dtb.Rows[i];

    //                        foreach (System.Data.DataColumn col in dtb.Columns)
    //                        {
    //                            var ColumnName = col.ColumnName;
    //                            string strValue = dr[ColumnName].ToString();

    //                            foreach (Field myMergeField in wordDoc.Fields)
    //                            {
    //                                Range rngFieldCode = myMergeField.Code;
    //                                String fieldText = rngFieldCode.Text;

    //                                if (fieldText.StartsWith(" MERGEFIELD"))
    //                                {
    //                                    Int32 endMerge = fieldText.IndexOf("\\");
    //                                    Int32 fieldNameLength = fieldText.Length - endMerge;
    //                                    String fieldName = fieldText.Substring(11, endMerge - 11);
    //                                    fieldName = fieldName.Trim();

    //                                    if (ColumnName + (i + 1).ToString() == fieldName)
    //                                    {
    //                                        myMergeField.Select();
    //                                        application.Selection.TypeText(strValue);
    //                                    }
    //                                }
    //                            }
    //                        }
    //                    }

    //                    foreach (System.Data.DataColumn col in dtb.Columns)
    //                    {
    //                        var ColumnName = col.ColumnName;

    //                        foreach (Field myMergeField in wordDoc.Fields)
    //                        {
    //                            Range rngFieldCode = myMergeField.Code;
    //                            String fieldText = rngFieldCode.Text;

    //                            if (fieldText.StartsWith(" MERGEFIELD"))
    //                            {
    //                                Int32 endMerge = fieldText.IndexOf("\\");
    //                                Int32 fieldNameLength = fieldText.Length - endMerge;
    //                                String fieldName = fieldText.Substring(11, endMerge - 11);
    //                                fieldName = fieldName.Trim();

    //                                if (fieldName.Contains(ColumnName))
    //                                {
    //                                    myMergeField.Select();

    //                                    if (application.Selection.Text == "«" + fieldName + "»")
    //                                        application.Selection.TypeText(" ");
    //                                }
    //                            }
    //                        }
    //                    }
    //                }
    //            }

    //            if (Dics != null && Dics.Count > 0)
    //            {
    //                for (int i = 0; i < Dics.Count; i++)
    //                {
    //                    var Dic = Dics[i];

    //                    foreach (var DicItem in Dic)
    //                    {
    //                        string ColumnName = DicItem.Key;
    //                        string strValue = DicItem.Value;

    //                        foreach (Field myMergeField in wordDoc.Fields)
    //                        {
    //                            Range rngFieldCode = myMergeField.Code;
    //                            String fieldText = rngFieldCode.Text;

    //                            if (fieldText.StartsWith(" MERGEFIELD"))
    //                            {
    //                                Int32 endMerge = fieldText.IndexOf("\\");
    //                                Int32 fieldNameLength = fieldText.Length - endMerge;
    //                                String fieldName = fieldText.Substring(11, endMerge - 11);
    //                                fieldName = fieldName.Trim();

    //                                if (ColumnName + (i + 1).ToString() == fieldName)
    //                                {
    //                                    myMergeField.Select();
    //                                    application.Selection.TypeText(strValue);
    //                                }
    //                            }
    //                        }
    //                    }

    //                    var Dic0 = Dics[0];

    //                    foreach (var DicItem in Dic)
    //                    {
    //                        var ColumnName = DicItem.Key;

    //                        foreach (Field myMergeField in wordDoc.Fields)
    //                        {
    //                            Range rngFieldCode = myMergeField.Code;
    //                            String fieldText = rngFieldCode.Text;

    //                            if (fieldText.StartsWith(" MERGEFIELD"))
    //                            {
    //                                Int32 endMerge = fieldText.IndexOf("\\");
    //                                Int32 fieldNameLength = fieldText.Length - endMerge;
    //                                String fieldName = fieldText.Substring(11, endMerge - 11);
    //                                fieldName = fieldName.Trim();

    //                                if (fieldName.Contains(ColumnName))
    //                                {
    //                                    myMergeField.Select();

    //                                    if (application.Selection.Text == "«" + fieldName + "»")
    //                                        application.Selection.TypeText(" ");
    //                                }
    //                            }
    //                        }
    //                    }
    //                }
    //            }

    //            if (areas != null)
    //            {
    //                foreach (var area in areas)
    //                {
    //                    object oEndOfDoc = area.Key;
    //                    bool bShow = area.Value;
    //                    Range wrdRng = wordDoc.Bookmarks[ref oEndOfDoc].Range;//.get_Item(ref oEndOfDoc).Range;
    //                    if (!bShow)
    //                    {
    //                        wrdRng.Delete();
    //                    }
    //                }
    //            }

    //            wordDoc.SaveAs(strSaveAsFilePath);
    //            //application.Application.Quit();
    //            bOK = true;
    //        }
    //        catch (Exception ex)
    //        {
    //            throw ex;
    //        }
    //        finally
    //        {
    //            wordDoc.Close();
    //            application.Application.Quit();
    //        }

    //        return bOK;
    //    }

    //    public void SaveFileToClient(HttpResponse response, string strFilePath, string strFileName, bool bDeleteFile)
    //    {
    //        response.Clear();
    //        response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName);
    //        response.WriteFile(strFilePath + strFileName);
    //        response.Flush();
    //        if (bDeleteFile)
    //        {
    //            System.IO.File.Delete(strFilePath + strFileName);
    //        }
    //        response.End();
    //    }

    //    public bool MergeExcel(HttpResponse response, string strTemplateFilePath, string strFileName
    //        , Dictionary<string, System.Data.DataTable> dtbs = null
    //        , List<Dictionary<string, string>> Dics = null
    //        , OfficeOpenXml.Table.TableStyles tableStyle = OfficeOpenXml.Table.TableStyles.None)
    //    {
    //        bool bOK = false;

    //        FileInfo file = new FileInfo(strTemplateFilePath);

    //        using (ExcelPackage pck = new ExcelPackage(file, true))
    //        {
    //            if (pck.Workbook.Worksheets.Count > 0)
    //            {
    //                ExcelWorksheet ws = pck.Workbook.Worksheets[1];

    //                if (dtbs != null)
    //                {
    //                    foreach (var dtb in dtbs)
    //                    {
    //                        if (dtb.Value.Rows.Count > 0)
    //                        {
    //                            ws.Cells[dtb.Key].LoadFromDataTable(dtb.Value, false);
    //                        }
    //                    }
    //                }

    //                if (Dics != null)
    //                {
    //                    foreach (var Dic in Dics)
    //                    {
    //                        foreach (var item in Dic)
    //                        {
    //                            ws.Cells[item.Key].Value = item.Value;
    //                        }
    //                    }
    //                }

    //                response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    //                response.AddHeader("content-disposition", string.Format("attachment;  filename={0}.xlsx", strFileName));
    //                response.BinaryWrite(pck.GetAsByteArray());
    //                pck.Dispose();
    //            }
    //        }
    //        return bOK;
    //    }

    //    public void FolderACL(String accountName, String folderPath)
    //    {
    //        FileSystemRights Rights;

    //        //What rights are we setting?
    //        Rights = FileSystemRights.FullControl;
    //        bool modified;
    //        InheritanceFlags none = new InheritanceFlags();
    //        none = InheritanceFlags.None;

    //        //set on dir itself
    //        FileSystemAccessRule accessRule = new FileSystemAccessRule(accountName, Rights, none, PropagationFlags.NoPropagateInherit, AccessControlType.Allow);
    //        DirectoryInfo dInfo = new DirectoryInfo(folderPath);
    //        DirectorySecurity dSecurity = dInfo.GetAccessControl();
    //        dSecurity.ModifyAccessRule(AccessControlModification.Set, accessRule, out modified);

    //        //Always allow objects to inherit on a directory 
    //        InheritanceFlags iFlags = new InheritanceFlags();
    //        iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;

    //        //Add Access rule for the inheritance
    //        FileSystemAccessRule accessRule2 = new FileSystemAccessRule(accountName, Rights, iFlags, PropagationFlags.InheritOnly, AccessControlType.Allow);
    //        dSecurity.ModifyAccessRule(AccessControlModification.Add, accessRule2, out modified);

    //        dInfo.SetAccessControl(dSecurity);
    //    }

    //    #region[Export Excel]
    //    public void WriteDicToExcel(HttpResponse Response, Dictionary<string, string> _dtM, string type, string path)
    //    {
    //        if (_dtM.Count <= 0) return;
    //        CheckFolderExist(path);

    //        FileInfo newFile = new FileInfo(Path.Combine(path, type + "Template.xlsx"));
    //        if (!newFile.Exists) return;

    //        using (ExcelPackage xlPackage = new ExcelPackage(newFile, true))
    //        {
    //            //////you can customize this method to do your excel
    //            if (_dtM.Count > 0)
    //                AddWorkSheet(_dtM, "M", ':', xlPackage);

    //            //////write file excel
    //            WriteFile(Response, type, xlPackage);
    //        }
    //    }

    //    private static void AddWorkSheet(Dictionary<string, string> _dtM, string _sheet, char _char, ExcelPackage xlPackage)
    //    {
    //        ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets[_sheet];
    //        if (worksheet != null)
    //        {
    //            foreach (KeyValuePair<string, string> item in _dtM)
    //            {
    //                string[] _cell = item.Key.Split(_char);
    //                if (_cell.Length >= 2)
    //                {
    //                    int row = Convert.ToInt32(_cell[0]);
    //                    int col = Convert.ToInt32(_cell[1]);
    //                    worksheet.Cells[row, col].Value = item.Value;
    //                    worksheet.Cells[row, col].Style.Font.SetFromFont(new System.Drawing.Font("TH Sarabun New", 14, FontStyle.Regular));
    //                    worksheet.Cells[row, col].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;
    //                }
    //            }
    //        }
    //    }

    //    private void WriteFile(HttpResponse Response, string type, ExcelPackage xlPackage)
    //    {
    //        //you can customize file name
    //        string filename = type + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xlsx";
    //        Response.Clear();
    //        Response.AddHeader("content-disposition", "attachment;  filename=" + filename);
    //        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    //        Response.BinaryWrite(xlPackage.GetAsByteArray());
    //        Response.Flush();
    //        Response.End();
    //    }

    //    private void CheckFolderExist(string path)
    //    {
    //        if (!Directory.Exists(path))
    //        {
    //            Directory.CreateDirectory(path);
    //            Main main = new Main();
    //            FolderACL("Everyone", path);
    //        }
    //    }
    //    #endregion[Export Excel]
    //}

    public enum contact_type { Unknown = 0, Person = 47, JuristicPerson = 48 };
}
